Java使用位域进行多标记(状态)管理

您所在的位置:网站首页 int logo Java使用位域进行多标记(状态)管理

Java使用位域进行多标记(状态)管理

2023-04-07 23:18| 来源: 网络整理| 查看: 265

Android中位域的应用

在Android中,我们会经常用到或者看到以下这样的代码 :

public class ExampleUnitTest { @Test public void gravityTest(LayoutParams params) { // 视图在layout中右下角显示 params.gravity = Gravity.RIGHT | Gravity.BOTTOM; } @Test public void intentFlagTest(Intent intent) { // 清空任务栈中所有旧的activity intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); // 如果activity已存在于栈中,清空该activity之上的所有任务 intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); } @Test public void windowMangerFlags(WindowManager.LayoutParams params) { // 不拦截视图以外的事件,在锁屏中显示 params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED; } }

通过一个 int字段,来添加多个 标志或者状态. 一个int字段,能够管理多个标记(状态)值. 如此神奇的操作怎样实现的呢? 答案就是通过位运算来实现.

位操作基础

java中提供的基础位运算符有 与(&),或(|),非(~),异或(^),左移)和无符号右移(>>>).

除了位非(~)是一元操作符外,其它的都是二元操作符。

下面只介绍本文中,使用到的位操作

按位与

A & B : A和B对应的二进制数位都为1时,结果才为1,其他情况为0.

A = 001101 // 13 B = 100101 // 37 A & B = 000101 // 5 按位或

A | B : A和B对应的二进制数位都为0时,结果才为0,其他情况为1.

A = 001101 // 13 B = 100101 // 37 A | B = 101101 // 45 按位非

~A : 将a的二进制表示每一位进行取反操作,0变1,1变0. 相当于相反数 - 1

A = 001101 // 13 ~A = 11111111111111111111111111110010 // int32位,补码表示,第一位为符号位 // 根据上诉补码转原码为 // 10000000000000000000000000001110 // -14 左移操作

A



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3